#ifndef __BE_SCENE__
#define __BE_SCENE__

class Scene
{
 private:
  NamedObjectSet<ObjectPtr> objectSet;
  Turple3f eye, center, up;

  class DrawFunc : public std::unary_function<NamedObjectSet<ObjectPtr>::ValueType , void>
  {
  private:
    RenderPtr render;

  public:
    DrawFunc(const RenderPtr _render);
    void operator() (NamedObjectSet<ObjectPtr>::ValueType _val);
  };

  class UpdateFunc : public std::unary_function<NamedObjectSet<ObjectPtr>::ValueType , void>
  {
  private:
    const UINT64 &time;

  public:
    UpdateFunc(const UINT64 &_time);
    void operator() (NamedObjectSet<ObjectPtr>::ValueType _val);
  };

 public:
  Scene();
  ~Scene();

  bool update(const UINT64 &_time) __FASTCALL;
  void addObject( ObjectPtr _object );
  void setCamera( const Turple3f &_eye, const Turple3f &_center, const Turple3f &_up );
  void draw( RenderPtr &_render );
};
#endif
